package com.rentong.cust.utils;

import com.rentong.cust.vo.CustJiesuanDto;
import com.rentong.cust.vo.CustJiesuanName;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;

public class ReadExcel {
    public static List<CustJiesuanDto> read(InputStream file) {
        String[] element = new String[100];
        String[] element1 = new String[100];
        List<String> list = new ArrayList<>();
        int i = -1;
        int j = -1;
        try (
//                FileInputStream file = new FileInputStream("D:\\建园维修2023年8-10月.xlsx");
                Workbook workbook = new XSSFWorkbook(file)) {
            // 获取第一个工作表
            Sheet sheet = workbook.getSheetAt(3);
            int rowCount = sheet.getLastRowNum() + 1;
            System.out.println(rowCount);
            int rowNum = 0;

            // 遍历每一行
            for (Row row : sheet) {
                rowNum++;
                // 遍历每一列
                for (Cell cell : row) {

                    // 根据单元格类型获取值
                    switch (cell.getCellType()) {
                        case STRING:
                            if (cell.getStringCellValue() != null && i <= 17) {
                                i++;
                                element[i] = cell.getStringCellValue();

                            } else {
                                if (cell.getStringCellValue() != null && rowNum <= rowCount - 6) {
                                    list.add(cell.getStringCellValue());
                                }


                                if (cell.getStringCellValue() != null && rowNum > rowCount - 6) {
                                    j++;
                                    element1[j] = cell.getStringCellValue();

                                }
                            }
                            break;
                        case NUMERIC:
                            if (cell.getNumericCellValue() > 30000) {

                                Date date = cell.getDateCellValue();


                                list.add(convertToCustomFormat(date, "yyyy-MM-dd"));
                            } else {
                                if (rowNum <= rowCount - 6) {
                                    list.add(String.valueOf(cell.getNumericCellValue()));
                                }

                            }


                            break;
                        case BOOLEAN:


                            break;
                        default:

                    }
                }

            }

        } catch (IOException e) {
            e.printStackTrace();
        }

        List<CustJiesuanDto> dtos = new ArrayList<>();
        CustJiesuanDto currentDto = null;
        List<CustJiesuanName> currentNames = new ArrayList<>();

        for (int p = 0; p < list.size(); p++) {
            String item = list.get(p);

            // 检测时间
            if (item.matches("\\d{4}-\\d{2}-\\d{2}")) {  // 如果是日期
                // 如果 currentDto 不为空，则保存前一个日期的 dto
                if (currentDto != null) {
                    currentDto.setCustJiesuanNames(currentNames);
                    dtos.add(currentDto);
                }
                // 创建新的 CustJiesuanDto 对象
                currentDto = new CustJiesuanDto();
                currentDto.setJiesuanTime(item);
                currentNames = new ArrayList<>();
            } else if (currentDto != null) {
                // 填充 CustJiesuanName 对象
                CustJiesuanName name = new CustJiesuanName();

                if (item.matches("[0-900000.]+")) {  // 判断工程量
                    String gongchengliang = item;
                    String danwei = list.get(p + 1);  // 单位
                    String projectName = list.get(p - 1); // 工程名称

                    name.setGongchengliang(gongchengliang);
                    name.setDanwei(danwei);
                    name.setProjectName(projectName);

                    currentNames.add(name);
                    p++; // 跳过单位的字符串
                }
            }
        }

        // 最后一个日期的处理
        if (currentDto != null) {
            currentDto.setCustJiesuanNames(currentNames);
            dtos.add(currentDto);
        }

        return dtos;

    }

    private static String convertToCustomFormat(Date date, String format) {
        try {
            SimpleDateFormat customFormat = new SimpleDateFormat(format);
            return customFormat.format(date);
        } catch (Exception e) {
            return "Error formatting date";
        }
    }

    private static String getProjectName(int currentIndex, List<String> list) {
        // 在列表中查找并返回工程名称，可以通过对当前项前面的位置进行适当判断
        // 你可以调整此方法根据数据结构决定如何获取工程名称
        if (currentIndex >= 3) {
            return list.get(currentIndex - 3);  // 取工程名称
        }
        return "";  // 默认返回空字符串
    }


}

